﻿Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Collections
Imports System.Text
Imports extranet.BE
Imports MySql.Data.MySqlClient

Public Class DAMensagem

    Private _conexao As MySqlConnection
    Private _con_string As String


    Sub New()
        _con_string = "Server=200.155.77.194;uid=evosystems;pwd=evosenha;Database=extranet;Allow User Variables=True" '"server=sqlserver01.reebokfitness.com.br;database=reebokfitness2;uid=reebokfitness2;pwd=rbkftnss4378"
    End Sub


    Public Function AddMensagem(ByVal objBEMensagem As BEMensagem) As Integer
        Dim auxIdMensagem As Integer
        Dim consultaSql As String = "insert into ext_mensagem (remetente, data, status, mensagem, aprovador, reprovador, justificativa_reprovacao) values (@remetente, @data, @status, @mensagem, @aprovador, @reprovador, @justificativa_reprovacao);"
        Using _conexao As New MySqlConnection(_con_string)
            Using command As New MySqlCommand(consultaSql, _conexao)
                command.Parameters.AddWithValue("@remetente", objBEMensagem.Remetente)
                command.Parameters.AddWithValue("@data", objBEMensagem.Data)
                command.Parameters.AddWithValue("@status", objBEMensagem.Status)
                command.Parameters.AddWithValue("@mensagem", objBEMensagem.Mensagem)
                command.Parameters.AddWithValue("@aprovador", IIf(objBEMensagem.Aprovador = "", Convert.DBNull, objBEMensagem.Aprovador))
                command.Parameters.AddWithValue("@reprovador", IIf(objBEMensagem.Reprovador = "", Convert.DBNull, objBEMensagem.Reprovador))
                command.Parameters.AddWithValue("@justificativa_reprovacao", IIf(objBEMensagem.JustificativaReprovacao = "", Convert.DBNull, objBEMensagem.JustificativaReprovacao))

                _conexao.Open()
                command.ExecuteNonQuery()
                command.CommandText = "select @@identity"
                auxIdMensagem = command.ExecuteScalar
                _conexao.Close()
                Return auxIdMensagem
            End Using
        End Using
    End Function

    Public Function BuscaMensagem(ByVal idMensagem As Integer) As BEMensagem
        Dim objBEMensagem As New BEMensagem
        Dim consultaSql As String = "SELECT ext_mensagem.* FROM ext_mensagem WHERE ext_mensagem.id_mensagem = " & idMensagem

        Using _conexao As New MySqlConnection(_con_string)
            Using command As New MySqlCommand(consultaSql, _conexao)
                _conexao.Open()
                Using reader As MySqlDataReader = command.ExecuteReader()
                    While reader.Read()
                        objBEMensagem.Id = idMensagem
                        objBEMensagem.Remetente = reader(BEMensagem.MSG_REMETENTE)
                        objBEMensagem.Data = reader(BEMensagem.MSG_DATA)
                        objBEMensagem.Status = reader(BEMensagem.MSG_STATUS)
                        objBEMensagem.Mensagem = reader(BEMensagem.MSG)
                        objBEMensagem.Aprovador = IIf(IsDBNull(reader(BEMensagem.MSG_APROVADOR)), "", reader(BEMensagem.MSG_APROVADOR))
                        objBEMensagem.Reprovador = IIf(IsDBNull(reader(BEMensagem.MSG_REPROVADOR)), "", reader(BEMensagem.MSG_REPROVADOR))
                        objBEMensagem.JustificativaReprovacao = IIf(IsDBNull(reader(BEMensagem.MSG_JUSTIFICATIVA_REPROVACAO)), "", reader(BEMensagem.MSG_JUSTIFICATIVA_REPROVACAO))
                    End While
                End Using
                _conexao.Close()
            End Using
        End Using
        Return objBEMensagem
    End Function


    Public Function AddMensagemRanking(ByVal strIdMensagem As String, ByVal strCPF As String, ByVal strIdRanking As String) As Integer
        Dim consultaSql As String = "insert into ext_ranking_vendedor_mensagem (cpf, id_mensagem, id_ranking) values (@cpf, @id_mensagem, @id_ranking)"
        Using _conexao As New MySqlConnection(_con_string)
            Using command As New MySqlCommand(consultaSql, _conexao)
                command.Parameters.AddWithValue("@id_mensagem", strIdMensagem)
                command.Parameters.AddWithValue("@cpf", strCPF)
                command.Parameters.AddWithValue("@id_ranking", strIdRanking)

                _conexao.Open()
                command.ExecuteNonQuery()
            End Using
        End Using
    End Function

    Public Sub ExcluirMensagem(ByVal objBEMensagem As BEMensagem)
        Try
            Dim objBD As New BancoDeDados
      objBD.ExecutaNonQuery("DELETE FROM ext_ranking_vendedor_mensagem WHERE id_mensagem = " & objBEMensagem.Id & ";" & _
                            "DELETE FROM ext_mensagem WHERE id_mensagem = " & objBEMensagem.Id & ";")
        Catch ex As ApplicationException
            Throw New ApplicationException("extranet.DA.DAMensagem.ExcluirMensagem(): " & ex.Message)
        End Try
    End Sub

    Public Function ListarTodasAsMensagensDoRanking(ByVal strIdRanking As String, ByVal boolAprovada As Boolean) As List(Of BE.BEMensagem)
        Dim objBD As New BancoDeDados
        Dim objDS As DataSet
        Dim objDARanking As New DARanking
        Dim lstBEMensagens As New List(Of BE.BEMensagem)
        Dim sb As New StringBuilder

        sb.Append(" SELECT m.*, rvm.cpf")
        sb.Append(" FROM ext_mensagem m")
        sb.Append(" INNER JOIN ext_ranking_vendedor_mensagem rvm ON rvm.id_mensagem = m.id_mensagem")
        sb.Append(" WHERE rvm.id_ranking = '" & strIdRanking & "'")
        sb.Append(" AND m.status = '" & IIf(boolAprovada, "Aprovada", "Aguardando") & "'")

        objDS = objBD.ExecutaQuery(sb.ToString())

        For Each objDR As DataRow In objDS.Tables(0).Rows
            Dim objBEMensagem As New BE.BEMensagem()
            Dim objDAVendedor As New DA.DARankeado

            objBEMensagem.Id = objDR("id_mensagem").ToString()
            objBEMensagem.Ranking = objDARanking.Selecionar(strIdRanking)
            objBEMensagem.Remetente = objDR("remetente").ToString()
            objBEMensagem.Data = DirectCast(objDR("data"), DateTime)
            lstBEMensagens.Add(objBEMensagem)
        Next

        Return lstBEMensagens
    End Function

    Public Function ListarMensagensRankeado(ByVal strIdRanking As String, ByVal strCPF As String, ByVal boolAprovada As Boolean, Optional ByVal intNumMaxMsg As Integer = 0) As List(Of BE.BEMensagem)
        Dim objBD As New BancoDeDados
        Dim objDS As DataSet
        Dim lstBEMensagens As New List(Of BE.BEMensagem)
        Dim sb As New StringBuilder

        sb.Append(" SELECT m.*")
        sb.Append(" FROM ext_mensagem m")
        sb.Append(" INNER JOIN ext_ranking_vendedor_mensagem rvm ON rvm.id_mensagem = m.id_mensagem")
        sb.Append(" WHERE rvm.id_ranking = '" & strIdRanking & "'")
        sb.Append(" AND rvm.cpf = '" & strCPF & "'")
        sb.Append(" AND m.status = '" & IIf(boolAprovada, "Aprovada", "Aguardando") & "'")
        sb.Append(" ORDER BY m.data DESC")
        If intNumMaxMsg <> 0 Then
            sb.Append(" LIMIT 0," & intNumMaxMsg.ToString)
        End If

        objDS = objBD.ExecutaQuery(sb.ToString())

        For Each objDR As DataRow In objDS.Tables(0).Rows
            Dim objBEMensagem As New BE.BEMensagem()
            Dim objBEUsuario As New BEUsuario
            Dim objDAUsuario As New DAUsuario

            objBEUsuario.Usuario = objDR("remetente").ToString()
            objBEMensagem.Id = objDR("id_mensagem").ToString()
            objBEMensagem.Remetente = objDR("remetente").ToString()
            objBEMensagem.UsuarioRemetente = objDAUsuario.SelecionaUsuario(objBEUsuario)
            objBEMensagem.Data = DirectCast(objDR("data"), DateTime)
            objBEMensagem.Status = objDR("status").ToString()
            objBEMensagem.Mensagem = objDR("mensagem").ToString()
            objBEMensagem.Aprovador = objDR("aprovador").ToString()
            objBEMensagem.Reprovador = objDR("reprovador").ToString()
            objBEMensagem.JustificativaReprovacao = objDR("justificativa_reprovacao").ToString()
            lstBEMensagens.Add(objBEMensagem)
        Next

        Return lstBEMensagens
    End Function

    Public Function SelecionarMensagensRankeado(ByVal strIdMensagem As String) As BE.BEMensagem
        Dim objBD As New BancoDeDados
        Dim objDS As DataSet
        Dim objBEMensagens As New BE.BEMensagem
        Dim objDARanking As New DARanking
        Dim sb As New StringBuilder
        Dim objDAUsuario As New DAUsuario

        sb.Append(" SELECT m.*, rvm.*, v.*")
        sb.Append(" FROM ext_mensagem m")
        sb.Append(" INNER JOIN ext_ranking_vendedor_mensagem rvm ON rvm.id_mensagem = m.id_mensagem")
        sb.Append(" LEFT JOIN ext_vendedor v ON v.cpf = rvm.cpf AND v.id_ranking = rvm.id_ranking")
        sb.Append(" WHERE m.id_mensagem = '" & strIdMensagem & "'")

        objDS = objBD.ExecutaQuery(sb.ToString())

        For Each objDR As DataRow In objDS.Tables(0).Rows
            objBEMensagens.Id = objDR("id_mensagem").ToString()
            objBEMensagens.Remetente = objDR("remetente").ToString()
            objBEMensagens.Data = DirectCast(objDR("data"), DateTime)
            objBEMensagens.Status = objDR("status").ToString()
            objBEMensagens.Mensagem = objDR("mensagem").ToString()
            objBEMensagens.Aprovador = objDR("aprovador").ToString()
            objBEMensagens.Reprovador = objDR("reprovador").ToString()
            objBEMensagens.JustificativaReprovacao = objDR("justificativa_reprovacao").ToString()
            objBEMensagens.Rankeado = objDR("nome").ToString()
            objBEMensagens.Ranking = objDARanking.Selecionar(objDR("id_ranking").ToString())
        Next

        Return objBEMensagens
    End Function

    Public Sub SalvarMensagem(ByVal objBEMensagem As BEMensagem)
        Dim consultaSql As String = "UPDATE ext_mensagem SET remetente = '" & objBEMensagem.Remetente & "', data = '" & objBEMensagem.Data.ToString("yyyy-MM-dd") & "', status = '" & objBEMensagem.Status & "', mensagem = '" & objBEMensagem.Mensagem & "', " & IIf(objBEMensagem.Reprovador = "", "", " reprovador = '" & objBEMensagem.Reprovador & "', ") & IIf(objBEMensagem.Aprovador = "", "", " aprovador = '" & objBEMensagem.Aprovador & "', ") & " justificativa_reprovacao = '" & objBEMensagem.JustificativaReprovacao & "' WHERE id_mensagem = '" & objBEMensagem.Id & "'"

        Using _conexao As New MySqlConnection(_con_string)
            Using command As New MySqlCommand(consultaSql, _conexao)
                _conexao.Open()
                command.ExecuteNonQuery()
                _conexao.Close()
            End Using
        End Using
    End Sub

End Class
